package pe.gob.mintra.trabajadoreshogar.daoimpl;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;


import pe.gob.mintra.trabajadoreshogar.bean.DatLab;
import pe.gob.mintra.trabajadoreshogar.bean.Empleador;
import pe.gob.mintra.trabajadoreshogar.bean.Liquidacion;
import pe.gob.mintra.trabajadoreshogar.bean.ParametrosBusqueda;
import pe.gob.mintra.trabajadoreshogar.bean.Provincia;
import pe.gob.mintra.trabajadoreshogar.bean.Trabajador;

import pe.gob.mintra.trabajadoreshogar.dao.DatLabDAO;
import pe.gob.mintra.trabajadoreshogar.factory.MyBatisConnectionFactory;

public class DatLabDAOImp implements DatLabDAO {
	
	private final static Logger logDatLabDAOImp = Logger.getLogger(DatLabDAOImp.class);
	
	private SqlSessionFactory sqlSessionFactory;

	public DatLabDAOImp() {
		sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
	}
	

	
	public void insertarDatLab(DatLab objDatLab){
		
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.insert("DatLab.insertarDatLab",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}

	}
	
	public void actualizarDatLab(DatLab objDatLab){
		
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("DatLab.actualizarDatLab",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}

	}



	@Override
	public void insertarDatLabVinEmpresa(DatLab objDatLab) {
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.insert("DatLab.insertarDatLabVinEmpresa",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}
		
	}



	@Override
	public void actualizarDatLabVinEmpresa(DatLab objDatLab) {
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("DatLab.actualizarDatLabVinEmpresa",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			System.out.println(ex.getMessage());
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}
		
	}



	@Override
	public List<Liquidacion> listarLiquidacionesxEmpleador(
			ParametrosBusqueda objParam) {
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.listarLiquidacionesxEmpleador", objParam);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}



	@Override
	public List<Liquidacion> listarLiquidacionesxTrabajador(
			ParametrosBusqueda objParam) {
		
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.listarLiquidacionesxTrabajador", objParam);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}



	@Override
	public DatLab obtenerDatLab(Liquidacion objLiquidacion) {
		SqlSession session = sqlSessionFactory.openSession();
		DatLab datLab=null;
		
		try{
			datLab=(DatLab)session.selectOne("DatLab.obtenerDatLab",objLiquidacion);
		}catch(Exception ex){
			
		}finally{
			session.close();
		}
		
		return datLab;
		
	}



	@Override
	public List<Liquidacion> listarLiquidacionesxDatLab(DatLab objDatLab) {
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.listarLiquidacionesxDatLab", objDatLab);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}



	@Override
	public List<Liquidacion> listarLiquidacionesxRangoFechas(
			ParametrosBusqueda objParam) {
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.listarLiquidacionesxRangoFechas", objParam);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}



	@Override
	public void recalcular(DatLab objDatLab) {
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("DatLab.recalcular",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}
		
	}



	@Override
	public void otroconcepto(DatLab objDatLab) {
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("DatLab.otroconcepto",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}
		
	}



	@Override
	public void considerarEst(DatLab objDatLab) {
		SqlSession session = sqlSessionFactory.openSession();

		try {
			session.update("DatLab.considerarEst",objDatLab);
			
		} 
		catch(Exception ex){
			session.rollback();
			logDatLabDAOImp.error(ex.getMessage());
		}
		finally {
			session.close();
		}
		
	}



	@Override
	public List<Liquidacion> generarReporteAtenxGen(ParametrosBusqueda objParam) {
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.generarReporteAtenxGen", objParam);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}
	
	@Override
	public List<Liquidacion> generarReporteAtenxLiq(ParametrosBusqueda objParam) {
		List<Liquidacion> lstLiquidacion = new ArrayList<Liquidacion>();
		SqlSession session = sqlSessionFactory.openSession();
		
		try{
			lstLiquidacion = (List<Liquidacion>) session.selectList(
					"DatLab.generarReporteAtenxLiq", objParam);
		}catch(Exception ex){
			logDatLabDAOImp.error(ex.getMessage());
		}finally{
			session.close();
		}
		

		return lstLiquidacion;
	}

}
